﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Entidades.Seguridad;
using Entidades.Sistema.Venta;
using MvcPaging;
using Modelo.Sistema.Venta;
using DevExpress.Web.Mvc;

namespace VistaOnlineR1._1.Controllers.Sistema.Venta
{
    public class ContactoController : BaseController
    {
        private const int DefaultPageSize = 10;

        #region campos
        CatalogoContacto _catalogoContacto;
        CatalogoCliente _catalogoCliente;
        #endregion

        #region Constructors
        public ContactoController()
            : this(new CatalogoContacto(), new CatalogoCliente())
        {
        }
        public ContactoController(CatalogoContacto catalogoContacto, CatalogoCliente catalogoCliente)
        {
            _catalogoContacto = catalogoContacto;
            _catalogoCliente = catalogoCliente;
        }
        #endregion

        

        public ActionResult Index(int? page)
        {
            List<Perfil> listPerfil = RecuperarPerfil();

            ViewBag.PermisoDelete = listPerfil.Any(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCrear = listPerfil.Any(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEditar = listPerfil.Any(per => per.Permiso.Nombre == "Edit");

            List<Contacto> contactos = _catalogoContacto.ListarContacto().ToList();

            ViewBag.Clientes = _catalogoCliente.ListarCliente();
            return View(_catalogoContacto.ListarContacto());
        }

        public ActionResult EditContactoPartial(int? nrocliente)
        {
            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");
            
            if (nrocliente != null)
            {
                ViewBag.IdCliente = nrocliente;
                ViewBag.Cliente = _catalogoCliente.ListarCliente().Where(x => x.IdCliente == (int)nrocliente);
                return PartialView("EditContactoPartial", _catalogoContacto.ListarContacto().Where(x => x.Cliente.IdCliente == (int)nrocliente).ToList());
            }

            ViewBag.Cliente = _catalogoCliente.ListarCliente();
            return PartialView("EditContactoPartial", _catalogoContacto.ListarContacto());
        }


        public ActionResult EditContactoAddNewPartial(Contacto contacto, int nrocliente)
        {
            if (nrocliente != null)
            {
                contacto.Cliente.IdCliente = nrocliente;
            }
            ModelState.Clear();
            if (ModelState.IsValid)
            {
                try
                {
                        _catalogoContacto.AgregarContacto(contacto);
                }
                    catch (Exception e)
                {
                        ViewData["EditError"] = e.Message;
                }
            }
            else
                ViewData["EditError"] = "Por Favor, modifica los errores.";

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            if (nrocliente != null)
            {
                ViewBag.IdCliente = nrocliente;
                ViewBag.Cliente = _catalogoCliente.ListarCliente().Where(x => x.IdCliente == (int)nrocliente);
                return PartialView("EditContactoPartial", _catalogoContacto.ListarContacto().Where(x => x.Cliente.IdCliente == (int)nrocliente).ToList());
            }
            ViewBag.Cliente = _catalogoCliente.ListarCliente();
            return PartialView("EditContactoPartial", _catalogoContacto.ListarContacto());
        }

        public ActionResult EditContactoUpdatePartial(Contacto contacto, int nrocliente)
        {
            if (nrocliente != null)
            {
                contacto.Cliente.IdCliente = nrocliente;
            }
            if (ModelState.IsValid)
            {
                try
                {
                        _catalogoContacto.ModificarContacto(contacto);
                    }
                    catch (Exception e)
                {
                        ViewData["EditError"] = e.Message;
                }
            return PartialView("EditContactoPartial", _catalogoContacto.ListarContacto());
            }
            else
                ViewData["EditError"] = "Por Favor, modifica los errores.";

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            

            if (nrocliente != null)
            {
                ViewBag.IdCliente = nrocliente;
                ViewBag.Cliente = _catalogoCliente.ListarCliente().Where(x => x.IdCliente == (int)nrocliente);
                return PartialView("EditContactoPartial", _catalogoContacto.ListarContacto().Where(x => x.Cliente.IdCliente == (int)nrocliente));
            }

            ViewBag.Cliente = _catalogoCliente.ListarCliente();
            return PartialView("EditContactoPartial", _catalogoContacto.ListarContacto());
        }

        public ActionResult EditContactoDeletePartial(Contacto contacto, int? nrocliente)
        {

            if (ModelState.IsValid)
        {
            try
            {
                    _catalogoContacto.EliminarContacto(contacto);
                    //_catalogoContacto.EliminarContacto(_catalogoContacto.BuscarContacto(contacto.IdContacto));
                }
                catch (Exception e)
                {
                    ViewData["EditError"] = e.Message;
                }
            }
            else
                ViewData["EditError"] = "Por Favor, modifica los errores.";

            List<Perfil> perfiles = RecuperarPerfil();

            ViewBag.PermisoDelete = perfiles.Exists(per => per.Permiso.Nombre == "Delete");
            ViewBag.PermisoCreate = perfiles.Exists(per => per.Permiso.Nombre == "Create");
            ViewBag.PermisoEdit = perfiles.Exists(per => per.Permiso.Nombre == "Edit");

            ViewBag.Clientes = _catalogoCliente.ListarCliente();

            if (nrocliente != null)
            {
                ViewBag.IdCliente = nrocliente;
            //    ViewBag.Cliente = _catalogoCliente.ListarCliente().Where(x => x.IdCliente == (int)nrocliente);
                return PartialView("EditContactoPartial", _catalogoContacto.ListarContacto().Where(x => x.Cliente.IdCliente == (int)nrocliente).ToList());
            }
            return PartialView("EditContactoPartial", _catalogoContacto.ListarContacto());
        }
    }
}